//
//  UITextView+Extension.swift
//  新浪微博---01次
//
//  Created by 李宗帅 on 16/5/15.
//  Copyright © 2016年 LS. All rights reserved.
//

import UIKit

extension UITextView {
    
    //MARK:-- 获取发布微博的表情
    func getPublishText() ->String{
        
        //        print(textView.text)
        ////        print("============")
        //        print(textView.attributedText)
        
        /*
        第一个参数: range: 要遍历的长度
        第二个参数: 默认值
        第三个参数: 闭包回调
        1. 字典
        2. range
        3.
        */
        
        var publishText = ""
        
        
        // 同步的闭包调用
        
        
        // 对 textView.attributedText进行遍历
        self.attributedText.enumerateAttributesInRange(NSMakeRange(0, self.attributedText.length), options: []) { (data:[String : AnyObject], range:NSRange, _) -> Void in
            
            //            print(data)
            //             print("============")
            //            print(range)
            
            // 如果 data 这个字典里 有 NSAttachment我们暂时认为是表情
            // ["NSFont": <UICTFont: 0x7f8c9ab0efc0> font-family: ".SFUIText-Regular"; font-weight: normal; font-style: normal; font-size: 16.00pt, "NSAttachment": <NSTextAttachment: 0x7f8c9adc7be0>]
            
            if let attachment = data["NSAttachment"] as? LSTextAttachment {
                
                //                print(attachment.emoticon?.chs)
                
                if let chs = attachment.emoticon?.chs{
                    
                    publishText = publishText + chs
                }
                // 获得到 表情的 chs
                //                print("表情")
            } else {
                //                print("文字")
                let text = (self.text as NSString).substringWithRange(range)
                //                print(text)
                
                publishText = publishText + text
            }
            
            
        }
        
        return publishText
        
        //        print(publishText)
    }
    
    // MARK:--对textView显示表情的代码抽取
    func insertEmoticon(emoticon: LSEmoticon) {
        
        // 这里是 显示默认图片和 浪小花图片的逻辑
        if let _ = emoticon.png {
            
            // 保存原来的
            let orginal = NSMutableAttributedString(attributedString: self.attributedText)
            /*
            bug :
            1. 后边的占位文字,没有消除
            2. 图片有点大 -- OK
            3. 始终都只能显示一个表情 --OK
            4. 多次点击之后,变小了 --OK
            5. 文字中间不能插入表情 -- OK
            6, 光标的位置 -- OK
            */
            let attribute =  LSTextAttachment.getEmoticonAttributeString(emoticon,fontHeigth: 16)
            
            // 光标的位置
            let range = self.selectedRange
            
            // 新的表情生成好之后,拼接
            //            orginal.appendAttributedString(attribute)
            orginal.replaceCharactersInRange(range, withAttributedString: attribute)
            // 怎么改变 字体大小
            // 注意: 改变图片的大小,需要设置 addAttributes 还需要设置 attachemnt.bounds
            orginal.addAttributes([NSFontAttributeName: self.font!], range: NSMakeRange(0, orginal.length))
            
            
            
            // 3. 可以赋值给textView
            self.attributedText = orginal
            
            
            //赋值之后, 去改变光标的位置
            self.selectedRange = NSMakeRange(range.location + 1, 0)
            
            //                print(textView.text)
            /*
            第一步: 把问题描述清楚. 当我输入一个表情之后,后边的占位符没有消失
            第二步: 按照事件的响应链,去分析逻辑.
            1.没有重绘在重绘的地方打断点,结果重绘方法没有走
            2.谁调用的重绘?  代理方法这里调用的重绘
            3.代理方法也没有走,让代理方法走一下
            */
            
            // 调用一下代理方法
            // 要为什么  textViewDidChange要插入一个 !
            // 你现在在手动调用,确保这个方法实现了
            self.delegate?.textViewDidChange!(self)
            
            /*
            textView.holdString = ""
            textView.setNeedsDisplay()
            */
            
            
        }
        
        // 这里是 emoji显示的逻辑
        if let emoji = emoticon.emoji{
            
            // textView
            self.replaceRange(self.selectedTextRange!, withText: emoji)
            
        }
        
        
        
    }

}